package com.iamteer.day22;

import java.util.Arrays;

/**
主要回顾：编解码
	ASCII：		美国标准信息交换码，7 位
	ISO8859-1：	拉丁码表（欧洲码表），8 位
	GB2312：		中文码表，英文 1 个字节，中文 2 个字节
	GBK：		GB2312 升级片，添加了更多的字符
	Unicode：	国际标准码规范
	UTF-8：		Unicode 规范的一种实现，英文 1 个字节，中文三个字节
	UTF-16：		Unicode 规范的一种实现，所有字符都占 2 个字节
 */
public class EncodeDecode {

	public static void main(String[] args) throws Exception {
		String string = "a中国";
		byte[] buf = string.getBytes();			//使用环境默认的编码
//		byte[] buf = string.getBytes("utf-8");	//使用 UTF-8 编码
//		byte[] buf = string.getBytes("gbk");	//使用 GBK 编码
		System.out.println(Arrays.toString(buf));
		
		//使用 GBK 来解码由 UTF-8 编码的字符串，会出现乱码
		string = new String(buf, "gbk");
		System.out.println(string);
		
		string = "a中国";
		buf = string.getBytes("unicode");	//编解码指定 Unicode，则会使用 UTF-16
		System.out.println(Arrays.toString(buf));
		//[-2, -1, 0, 97, 78, 45, 86, -3] -2, -1是 UTF-16 的标志。
		
		string = "大家好";
		buf = string.getBytes("gbk");			//把字符串用 gbk 编码
		string = new String(buf, "iso8859-1");	//用 iso8859-1 解码
		System.out.println(string);				//出来会是乱码
		
		buf = string.getBytes("iso8859-1");		//把乱码用 iso8859-1 编码回来
		string = new String(buf, "gbk");		//再用 gbk 解码（因为本来就是 gbk 编码的）
		System.out.println(string);				//出来就会是原来的字符串了
	}

}
